﻿using System.Collections.Generic;
using JoyTalq.Core.SystemApplications.Domain;
using JoyTalq.Core.SystemApplications.Persistence;


namespace JoyTalq.Core.SystemApplications.Service.Impl
{
    public class SystemService : ISystemService
    {       
        public ISystemDao SystemDao { get; set; }

        /// <summary>
        /// 新增項目參數
        /// </summary>
        /// <param name="itemParamVO">被新增的項目參數</param>
        /// <returns>新增後的項目參數</returns>
        public ItemParamVO CreateItemParam(ItemParamVO itemParamVO)
        {
            return SystemDao.CreateItemParam(itemParamVO);                    
        }

        /// <summary>
        /// 更新項目參數
        /// </summary>
        /// <param name="itemParamVO">被更新的項目參數</param>
        /// <returns>更新後的項目參數</returns>
        public ItemParamVO UpdateItemParam(ItemParamVO itemParamVO)
        {
            SystemDao.UpdateItemParam(itemParamVO);

            return itemParamVO;
        }

        /// <summary>
        /// 刪除項目參數
        /// </summary>
        /// <param name="itemParamVO">被刪除的項目參數</param>
        public void DeleteItemParam(ItemParamVO itemParamVO)
        {
            SystemDao.DeleteItemParam(itemParamVO);
        }

        /// <summary>
        /// 取得項目參數 By 識別碼
        /// </summary>
        /// <param name="itemParamId">識別碼</param>
        /// <returns>項目參數</returns>
        public ItemParamVO GetItemParamById(int itemParamId)
        {
            return SystemDao.GetItemParamById(itemParamId);
        }

        /// <summary>
        /// 取得項目參數清單
        /// </summary>
        /// <param name="queryString">搜尋語法，用Where...order by ...</param>
        /// <returns>項目參數清單</returns>
        public IList<ItemParamVO> GetItemParamList(string queryString)
        {
            return SystemDao.GetItemParamList(queryString);
        }

        /// <summary>
        /// 取得項目參數清單
        /// </summary>
        /// <param name="queryString">搜尋語法，用Where...order by ...</param>
        /// <returns>項目參數清單</returns>
        public IList<ItemParamVO> GetItemParamList(string queryString, int pageIndex, int pageSize)
        {
            return SystemDao.GetItemParamList(queryString, pageIndex, pageSize);
        }

        /// <summary>
        /// 取得全部的項目參數清單
        /// </summary>
        /// <returns>全部的項目參數清單</returns>
        public IList<ItemParamVO> GetAllItemParamList()
        {
            return SystemDao.GetAllItemParamList();
        }

        /// <summary>
        /// 取得全部的項目參數清單
        /// </summary>
        /// <param name="pageIndex">分頁索引</param>
        /// <param name="pageSize">分頁大小</param>
        /// <param name="sortField">排序欄位</param>
        /// <param name="sortDesc">升降冪排序</param>
        /// <returns>全部的項目參數清單</returns>
        public IList<ItemParamVO> GetAllItemParamList(int pageIndex, int pageSize, string sortField, bool sortDesc)
        {
            if (string.IsNullOrEmpty(sortField))
            {
                return SystemDao.GetAllItemParamList(pageIndex, pageSize);                
            }

            return SystemDao.GetAllItemParamList(pageIndex, pageSize, sortField, sortDesc);
        }

        /// <summary>
        /// 測試RollBack
        /// </summary>
        public void TestRollBack()
        {
            //ItemParamVO itemParamVO = new ItemParamVO("test", "test01", "test001", false);
            //itemParamVO = SystemDao.CreateItemParam(itemParamVO);

            for (int i = 0; i < 100; i++)
            {
                SystemDao.CreateItemParam(new ItemParamVO("a" + i, "b" + i, "c" + i, false));
            }
            
            IList<ItemParamVO> itemParamList = GetAllItemParamList(0, 10, "ItemParamId", true);
            //ItemParamVO newItemParamVO = SystemDao.GetItemParamById(itemParamVO.ItemParamId);
            //ItemParamVO newItemParamVO = GetItemParamById(itemParamVO.ItemParamId);

            foreach (ItemParamVO newItemParamVO in itemParamList)
            {
                newItemParamVO.Name += "ccc";
                newItemParamVO.Classify += "bb";
                newItemParamVO.Value += "vvvv";
                UpdateItemParam(newItemParamVO);
            }

            IList<ItemParamVO> itemParamList2 = GetAllItemParamList(0, 10, "ItemParamId", false);
            foreach (ItemParamVO newItemParamVO in itemParamList2)
            {
                DeleteItemParam(newItemParamVO);
            }

            //ItemParamVO newItemParamVO2 = SystemDao.UpdateItemParam(newItemParamVO);

            throw new System.Exception();
        }        
    }
}
